package jwtauth

import (
	"github.com/gin-gonic/gin"
	"net/http"
	"scaffold-demo/utils/jwtutils"
)

func JWTAuth(r *gin.Context) {
	requestUrl := r.FullPath()                                               //获取访问路径
	if requestUrl == "/api/auth/login" || requestUrl == "/api/auth/logout" { //判断是否为登录或登出路径，如果是登录登出，不进行拦截
		r.Next()
		return
	}
	tokenString := r.Request.Header.Get("Authorization") //查看前端请求是否携带token
	if tokenString == "" {                               //如果token为空，返回错误
		r.JSON(http.StatusOK, gin.H{
			"status":  401,
			"message": "用户未登录,请登录",
		})
		r.Abort() //终止请求
		return
	}
	claims, err := jwtutils.ParseJwt(tokenString) //解析token
	if err != nil {                               //解析失败返回错误
		r.JSON(http.StatusOK, gin.H{
			"status":  401,
			"message": "token解析失败",
		})
		r.Abort()
		return
	}
	r.Set("claims", claims) //把解析的token存储到Context，在别的地方用通过r.Get("claims")获取
	r.Next()
}
